/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package videogest;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import persistencia.persistenciaPromocion;

/**
 * Esta clase contredra los atributos especificos de una promocion
 * @author JAVA
 */
public class Promocion {

    private String codigoPromocion;
    private String nombre;
    private Date fechaInicio = null;
    private Date fechaFin = null;
    private float descuento;
    List<Producto> productos;
    private boolean baja;

    /**
     * Constructor de la clase Promocion, recibe los pametros que intervienen en la clase promocion
     * @param nombre  el atributo nombre recibe el nombre de la promocion
     * @param fechaInicio el atributo fecha recibe una fecha
     * @param fechaFin    el atributo fecha recibe una fecha
     * @param descuento   el atributo descuento aplicado al adquirir una promocion
     * @param producto    el atributo producto guarda el codigo del producto que participa en la promocion
     * @throws FileNotFoundException
     * @throws IOException
     */
    public Promocion(String nombre, Date fechaInicio, Date fechaFin, float descuento, List<Producto> productos) throws FileNotFoundException, IOException {
        this.codigoPromocion = Fichero.Leer(Codigo.Promocion);
        this.nombre = nombre;
        this.fechaInicio = fechaInicio;
        this.fechaFin = fechaFin;
        this.descuento = descuento;
        this.productos = productos;
        Fichero.incrementarCodigo(this.codigoPromocion, Codigo.Promocion);
        this.baja = false;
        //Fichero.incrementarCodigo(codigoPromocion, Codigo.Promocion);
    }

    public Promocion(String codigo, String nombre, Date fechaInicio, Date fechaFin, float descuento, List<Producto> productos) throws FileNotFoundException, IOException {
        this.codigoPromocion = codigo;
        this.nombre = nombre;
        this.fechaInicio = fechaInicio;
        this.fechaFin = fechaFin;
        this.descuento = descuento;
        this.productos = productos;
        this.baja = false;
    }

    public String getCodigoPromocion() {
        return this.codigoPromocion;
    }

    public void setCodigoPromocion(String codigoPromocion) {
        this.codigoPromocion = codigoPromocion;
    }

    public float getDescuento() {
        return this.descuento;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public void setDescuento(float descuento) {
        this.descuento = descuento;
    }

    public Date getFechaIncio() {
        return this.fechaInicio;
    }

    public Date getFechaFin() {
        return this.fechaFin;
    }

    public String getNombre() {
        return this.nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     *
     * @return producto
     */
    public List<Producto> getProductos() {
        return this.productos;
    }

    public Date getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    public void setProductos(List<Producto> producto) {
        this.productos = producto;

    }

    public boolean isBaja() {
        return baja;
    }

    public void setBaja(boolean baja) {
        this.baja = baja;
    }

    public void mostrarProductos() {
        //muestro todos los productos de la lista "productos"
        for (Producto p : productos) {
            System.out.print(p);
            System.out.print("\n");
        }
    }

    //Sobreescribimos el toString para mostrar la promocion y como queremos mostrar
    @Override
    public String toString() {

        String ret = "\n";
        ret += "================================================\n";
        ret += "|             DATOS DE LA PROMOCION\n";
        ret += "================================================\n";
        ret += "|-- Codigo Promocion: " + this.getCodigoPromocion() + "\n";
        ret += "|-- Nombre: " + this.getNombre() + "\n";
        try{
        ret += "|-- Productos: " + this.dameProductosPromocion(this.getCodigoPromocion()) + "\n";
        }catch(Exception e){
        }
        ret += "|-- Fecha Incio: " + this.getFechaIncio() + "\n";
        ret += "|-- Fehca Fin: " + this.getFechaFin() + "\n";
        ret += "|-- Descuento: " + this.getDescuento() + "% \n";
        ret += "================================================\n";

        return ret;

    }

    /**
     * Este metodo enviara a la base de datos un nuevo alta, creara un nuevo
     * registro en la base de datos de la tabla promocion
     */
    public void alta() {

        persistenciaPromocion.alta(this);
        
    }

 
    /**
     * Este metodo enviara a la base de datos una modificacion, 
     * se modificara un registro de la base de datos
     */
    public void modificacion() {

        persistenciaPromocion.modificar(this);
       
    }

    //Dos Promociones seran iguales cuando tienen el mismo c�digo
    @Override
    public boolean equals(Object o) {
        boolean res = false;
        if (o instanceof Promocion) {

            Promocion pr = (Promocion) o;
            if (this.getCodigoPromocion() == (pr.getCodigoPromocion())) {

                res = true;
            }
        }
        return res;
    }

    @Override
    public int hashCode() {
        int hash = 0;

        return hash;
    }

    public static Promocion damePromocion(String codigoProm) throws IOException, ParseException {
        
        return persistenciaPromocion.damePromocion(codigoProm);
    }

    public static List<String> getCodigoPromociones(String codigo) {

        return persistenciaPromocion.getCodigoPromociones(codigo);
    }

    public static float calculaDescuentoProducto(List<String> lcodigos) {
       
        return persistenciaPromocion.calculadescuento(lcodigos);

    }


    public static List<String> dameProductosPromocion(String codigo) throws IOException, IOException, IOException, IOException, ParseException{
         
         return persistenciaPromocion.dameProductosPromocion(codigo);

     }
    
}
